Cookie 和 session详解
因为要写单点登录系统,有些基本的东西想想还是说下的
在将cookie 和 session 之前需要先理解什么是会话
会话:
用户打开一个浏览器,点击多个超链接,访问多个web资源,然后关闭浏览器,整个过程称为一个会话。
http协议是无状态的,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换建立新的连接,也就是说,服务器无法跟踪会话。而cookie 和 session 就是用与解决这种问题。
1.什么是cookie
cookie是客户端的技术,程序把每个用户数据以cookie的形式写给用户各自的浏览器,当客户端再次访问服务器的时候,会带着各自的Cookie过来,这样服务器就能处理各自用户的数据了
1.1 如何使用cookie
1 | Cookie cookie = new Cookie("name","value"); //创建一个cookie |
以上的内容就是关于如何去使用一个cookie了。
1.2. cookie的细节
根据API的描述,一个cookie最大为4KB.浏览器一般只允许存放300个cookie,每个站点最多存放20个Cookie。Cookie被创建的时候默认使用Verssion 0 ,也就是http 1.0
1.2.1 cookie的删除
在cookie的API中没有删除cookie的具体方法,但是我们可以通过设置cookie的生命周期,来讲cookie删除,设置为0代表删除(详解自行查看setMaxAge()方法)
1 | cookie.setMaxAge(0); |
1.3 cookie的获取
1 | request.getCookies(); //返回的是cookie的数组 |
以上就是cookie的常用方法。
1.4 cookie设置注释
1 | cookie.setComment("comment") |
1.5 cookie 设置安全传输协议(例如 https ,ssl)
1 | cookie.setSecure(true|false) 默认为false |
2.什么是session
session是服务端的技术,当浏览器第1次访问web资源的时候,服务器会自动为其创建一个session,并保存在服务器,当需要保存用户数据的时候,可以将数据写入session中。当用户访问其他程序的时候,就可以直接从session中取值。值得一提的是sesion是建立在cookie的基础上创建的。
2.1 session实现原理
session的实现原理是建立在给浏览器回写cookie,并且是以JSESSIONID为键,但是这个cookie是没有时间的,也就是说,当你关闭浏览器时,代表一个会话结束了,也就是说你的session会被删除,当你再次访问服务器的时候,服务器会为你重新创建一个session。
2.2 session的使用
2.2.1 客户端不禁用cookie的情况
1 | HttpSession session = request.getSession();//客户端访问服务器的时候,服务器会自动创建一个session,如果客户端没有禁用cookie的话。 |
2.2.2 客户端禁用cookie的情况
1 |
|
2.3 session的一些细节
设置session的生命周期
可以通过设置配置文件的形式,设置session的生命周期;在web.xml文件中添加如下代码
1 | <session-config> |
参考以下2篇博文:
https://my.oschina.net/kevina… 深入源码剖析了session和cookie
http://blog.csdn.net/fangaoxi… 介绍了一些基本的知识
本来想自己写下基本知识,发现有现成的,就拿来主义了,自己保存的一篇文章,源于何处未知